package com.example.springcode.beans.factory;

import com.example.springcode.beans.PropertyValues;
import lombok.Data;

/**
 * @Author: chenxiuxiang
 * @Date: 2024-03-04 18:01
 * @Description:
 */
@Data
public class BeanDefinition {
    /**
     * 创建Bean的方式 单例模式
     */
    String SCOPE_SINGLETON = "singleton";
    /**
     * 创建Bean的方式 原型模式
     */
    String SCOPE_PROTOTYPE = "prototype";
    /**
     * 类信息 即自定义的类信息
     */
    private Class<?> beanClass;
    /**
     * 属性 即自定义类中包含的属性
     */
    private PropertyValues propertyValues;
    /**
     * 初始化方法
     */
    private String initMethodName;
    /**
     * 销毁方法
     */
    private String destroyMethodName;
    /**
     * 默认为单例模式
     */
    private String scope = SCOPE_SINGLETON;
    /**
     * 是否是单例模式
     */
    private boolean singleton = true;
    /**
     * 是否是原型模式
     */
    private boolean prototype = false;

    /**
     * 构造方法 创建Bean定义
     */
    public BeanDefinition(Class<?> beanClass) {
        this(beanClass, null);
    }

    /**
     * 构造方法 创建Bean定义
     */
    public BeanDefinition(Class<?> beanClass, PropertyValues propertyValues) {
        this.beanClass = beanClass;
        this.propertyValues = propertyValues != null ? propertyValues : new PropertyValues();
    }

    /**
     * 设置Bean作用域 是单例还是原型模式
     * @param scope 作用域
     */
    public void setScope(String scope) {
        this.scope = scope;
        this.singleton = SCOPE_SINGLETON.equals(scope);
        this.prototype = SCOPE_PROTOTYPE.equals(scope);
    }
}
